class Solution {
    public int minCut(String s) {
        int len = s.length() ;
        char[] arr = s.toCharArray() ;
        boolean[][] dp = new boolean[len][len] ;
        for(int i=len-1 ; i >= 0 ; i --){
            for(int  j = i ; j < len ; j ++){
                if(arr[i] == arr[j]){
                    dp[i][j] = i+1< j ? dp[i+1][j-1]:true ;
                }
            }
        }
        int[] g = new int[len] ;
        for(int i = 0 ; i < len ; i ++){
            g[i] = Integer.MAX_VALUE ;
            if(dp[0][i]){
                g[i] = 0 ;
            }else{
                for(int j=1 ; j <= i ; j ++){
                    if(dp[j][i]){
                        g[i] = Math.min(g[j-1]+1 , g[i]) ;
                    }
                }
            }
        }
        return g[len-1] ;
    }
}